import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class UserDao implements IUserDao {

  @Override
  public void insert(int id, String name) {
    JdbcUtils.update("insert into user(id, name) values(?,?)", id, name);
  }

  // 1. 返回的对象是不确定的
  // 2. 对象中的字段是不确定的
  // 3. 对象中的字段和数据库中的字段是1对1
  // 解决：
  //    1. 你告诉我需要将数据放在哪个对象中
  @Override
  public User getById(int id) {
    Connection cn = null;
    PreparedStatement st = null;
    ResultSet rs = null;

    try {
      // 建立连接
      cn = JdbcUtils.getConnection();

      // 生成查询语句
      st = JdbcUtils.getPrepareStatement(cn, "select * from user where id = ?", id);

      rs = st.executeQuery();

      User user = new User();

      // 获取到返回的ResultSet中的所有字段
      ResultSetMetaData md = rs.getMetaData();
      System.out.println("当前ReslutSet中有几列数据" + md.getColumnCount());
      for (int i = 0; i < md.getColumnCount(); i++) {
        System.out.println(md.getColumnName(i + 1));
      }

      while (rs.next()) {
        user.setId(rs.getInt("id"));
        user.setName(rs.getString("name"));

        // set + 字段名（首字母大写）
      }

      return user;
    } catch (SQLException e) {
      throw new RuntimeException(e.getMessage());
    } finally {
      JdbcUtils.close(cn, st, rs);
    }
  }

  public static void main(String[] args) {
    Object o = JdbcUtils.query(User.class, "select * from user where id = ?", 2);
    System.out.println(o);
  }
}
